home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-09-09 | 6.8 KB | 313 lines | [TEXT/PJMM] |
- UNIT StdMenus;
- {***********************************}
- INTERFACE
-
- USES
- MemTypes, QuickDraw, OSIntf, ToolIntf, PackIntf, MacPrint, ObjIntf, GlobalStuff, AboutBox, StdWindows;
-
- TYPE
- TMenu = OBJECT(TObject)
- fMenuHdl: MenuHandle;
- PROCEDURE Create (vRsrcID: Integer);
- PROCEDURE Choose (vItem: Integer);
- END;
-
- TAppleMenu = OBJECT(TMenu)
- fAboutID: Integer;
- PROCEDURE Setup (vAlertID: Integer);
- PROCEDURE Create (vRsrcID: Integer);
- override;
- PROCEDURE Choose (vItem: Integer);
- override;
- END;
-
- TFileMenu = OBJECT(TMenu)
- PROCEDURE Choose (vItem: Integer);
- override;
- END;
-
- TEditMenu = OBJECT(TMenu)
- PROCEDURE Choose (vItem: Integer);
- override;
- END;
-
- VAR
- oAppleMenu: TAppleMenu;
- oFileMenu: TFileMenu;
- oEditMenu: TEditMenu;
-
- PROCEDURE InitStdMenus;
- PROCEDURE ClickInStdMenus (vMenu, vItem: Integer);
- PROCEDURE SetStdMenuItems;
- PROCEDURE DisposeStdMenus;
- PROCEDURE DoNew (vWindowKind: Integer;
- vDocType: OSType);
-
- {***********************************}
- IMPLEMENTATION
-
- PROCEDURE InitStdMenus;
- BEGIN
- New(oAppleMenu);
- oAppleMenu.Setup(kAboutID);
- oAppleMenu.Create(kAppleID);
-
- New(oFileMenu);
- oFileMenu.Create(kFileID);
-
- New(oEditMenu);
- oEditMenu.Create(kEditID);
- END; {InitStdMenus}
-
- {========================================}
- PROCEDURE ClickInStdMenus (vMenu, vItem: Integer);
- BEGIN
- CASE vMenu OF
- kAppleID:
- oAppleMenu.Choose(vItem);
- kFileID:
- oFileMenu.Choose(vItem);
- kEditID:
- oEditMenu.Choose(vItem);
- OTHERWISE
- END;
- END; {ClickInStdMenus}
-
- {========================================}
- PROCEDURE SetStdMenuItems;
- VAR
- vFrontWFlag: BOOLEAN;
- vUserWFlag: BOOLEAN;
- vMaxWFlag: BOOLEAN;
-
- BEGIN
- vFrontWFlag := (FrontWindow <> NIL);
- vUserWFlag := IsAppWindow(FrontWindow);
- vMaxWFlag := NOT ((kMaxWindows <> 0) AND (gWCount = kMaxWindows));
- SetEnable(kFileID, kNew, vMaxWFlag);
- SetEnable(kFileID, kClose, vFrontWFlag);
- SetEnable(kFileID, kSave, vUserWFlag);
- SetEnable(kFileID, kSaveAs, vUserWFlag);
- SetEnable(kFileID, kPrint, vUserWFlag);
- SetEnable(kEditID, 0, vFrontWFlag);
- IF vFrontWFlag AND NOT vUserWFlag THEN
- BEGIN
- SetEnable(kEditID, kCut, TRUE);
- SetEnable(kEditID, kCopy, TRUE);
- SetEnable(kEditID, kPaste, TRUE);
- END;
- END; {SetStdMenuItems}
-
- {========================================}
- PROCEDURE DisposeStdMenus;
- BEGIN
- oAppleMenu.Free;
- oFileMenu.Free;
- oEditMenu.Free;
- END; {DisposeStdMenus}
-
- {========================================}
- PROCEDURE TMenu.Create (vRsrcID: Integer);
- BEGIN
- HLock(Handle(Self));
- fMenuHdl := GetMenu(vRsrcID);
- InsertMenu(fMenuHdl, 0);
- HUnlock(Handle(Self));
- END; {Create}
-
- {----------------------------------------}
- PROCEDURE TMenu.Choose (vItem: Integer);
- BEGIN
- END; {Choose}
-
- {========================================}
- PROCEDURE TAppleMenu.Setup (vAlertID: Integer);
- BEGIN
- fAboutID := vAlertID
- END; {Setup}
-
- {----------------------------------------}
- PROCEDURE TAppleMenu.Create (vRsrcID: Integer);
- BEGIN
- HLock(Handle(Self));
- fMenuHdl := GetMenu(vRsrcID);
- AddResMenu(fMenuHdl, 'DRVR');
- InsertMenu(fMenuHdl, 0);
- HUnlock(Handle(Self));
- END; {Create}
-
- {----------------------------------------}
- PROCEDURE TAppleMenu.Choose (vItem: Integer);
- VAR
- vDAName: Str255;
- vDANumber: Integer;
- vSavePort: GrafPtr;
-
- BEGIN
- IF vItem = kAbout THEN
- DoAbout(fAboutID)
- ELSE
- BEGIN
- GetPort(vSavePort); {protect against DA}
- GetItem(fMenuHdl, vItem, vDAName);
- vDANumber := OpenDeskAcc(vDAName);
- SetPort(vSavePort);
- END;
- END; {Choose}
-
- {========================================}
- PROCEDURE DoNew (vWindowKind: Integer;
- vDocType: OSType);
- BEGIN
- CASE vWindowKind OF
- kNoGrow:
- New(TWindow(oWindow));
- kGrow:
- New(TGrowWindow(oWindow));
- kHScroll..kScroll:
- New(TScrollWindow(oWindow));
- kHScrollZoom..kScrollZoom:
- IF BitTst(Ptr(ROM85), 0) THEN
- New(TScrollWindow(oWindow))
- ELSE
- New(TScrollZoomWindow(oWindow));
- OTHERWISE
- END;
- oWindow.fWKind := vWindowKind;
- oWindow.DoNew(vDocType);
- ShowWindow(oWindow.fWPtr); {generates activate and update event}
- END; {DoNew}
-
- {----------------------------------------}
- PROCEDURE DoOpen;
- VAR
- vPt: Point;
- vNumTypes: Integer;
- vTypeList: SFTypeList;
- vReply: SFReply;
- vWPeek: WindowPeek;
-
- BEGIN
- CenterDialogBox(348, 200, vPt);
- vNumTypes := 2;
- vTypeList[0] := kPictDoc;
- vTypeList[1] := kTextDoc;
- SFGetFile(vPt, '', NIL, vNumTypes, vTypeList, NIL, vReply);
- WITH vReply DO
- IF good THEN
- BEGIN
- IF IsAppWindow(FrontWindow) THEN
- IF DuplicateFileName(FrontWindow, fName, vWPeek) THEN
- IF OSError(opWRErr) THEN
- Exit(DoOpen);
- DoNew(kWindowKind, fType);
- oWindow.DoOpen(fName, vRefNum);
- END;
- END; {DoOpen}
-
- {----------------------------------------}
- PROCEDURE DoClose;
- VAR
- vDANumber: Integer;
-
- BEGIN
- IF IsAppWindow(FrontWindow) THEN
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- oWindow.DoClose;
- END
- ELSE
- BEGIN
- vDANumber := WindowPeek(FrontWindow)^.windowkind;
- CloseDeskAcc(vDANumber);
- END;
- END; {DoClose}
-
- {----------------------------------------}
- PROCEDURE DoSave (vSaveAs: BOOLEAN);
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- IF oWindow.Saved(vSaveAs) THEN
- END; {DoSave}
-
- {----------------------------------------}
- PROCEDURE DoPageSetup;
- VAR
- vFlag: BOOLEAN;
-
- BEGIN
- PrOpen;
- IF OSError(PrError) THEN
- Exit(DoPageSetup);
- SetCursor(arrow);
- vFlag := PrValidate(gPrintHdl);
- vFlag := PrStlDialog(gPrintHdl);
- vFlag := OSError(PrError);
- PrClose;
- IF OSError(PrError) THEN
- END; {DoPageSetup}
-
- {----------------------------------------}
- PROCEDURE DoPrint;
- VAR
- vFlag: BOOLEAN;
-
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- PrOpen;
- IF OSError(PrError) THEN
- Exit(DoPrint);
- SetCursor(arrow);
- vFlag := PrValidate(gPrintHdl);
- IF PrJobDialog(gPrintHdl) THEN
- oWindow.DoPrint;
- PrClose;
- IF OSError(PrError) THEN
- END; {DoPrint}
-
- {----------------------------------------}
- PROCEDURE DoQuit;
- BEGIN
- gQuitting := TRUE;
- WHILE (FrontWindow <> NIL) AND gQuitting DO
- DoClose;
- IF gQuitting THEN
- gDone := TRUE;
- END; {DoQuit}
-
- {----------------------------------------}
- PROCEDURE TFileMenu.Choose (vItem: Integer);
- BEGIN
- CASE vItem OF
- kNew:
- DoNew(kWindowKind, kDocKind);
- kOpen:
- DoOpen;
- kClose:
- DoClose;
- kSave:
- DoSave(FALSE);
- kSaveAs:
- DoSave(TRUE);
- kPageSetUp:
- DoPageSetup;
- kPrint:
- DoPrint;
- kQuit:
- DoQuit;
- END;
- END; {Choose}
-
- {========================================}
- PROCEDURE TEditMenu.Choose (vItem: Integer);
- BEGIN
- IF NOT SystemEdit(vItem - 1) THEN
- IF FrontWindow <> NIL THEN
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- oWindow.Edit(vItem);
- END;
- END; {Choose}
-
- END. {unit StdMenus}
- {***********************************}